package org.example.mytest.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

    /**
     * 配置 Redis 连接工厂
     * 会自动读取 application.yml 中 spring.data.redis 前缀的配置
     */
    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        // Lettuce 是 Spring Boot 默认的 Redis 客户端，性能优于 Jedis
        return new LettuceConnectionFactory();
    }

    /**
     * 配置 StringRedisTemplate（推荐使用，避免序列化问题）
     * 用于操作 Redis 中的字符串类型数据
     */
    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory connectionFactory) {
        StringRedisTemplate template = new StringRedisTemplate();
        // 设置连接工厂
        template.setConnectionFactory(connectionFactory);

        // 配置序列化器（避免存储到 Redis 中的数据出现乱码）
        StringRedisSerializer serializer = new StringRedisSerializer();
        template.setKeySerializer(serializer);      // key 序列化
        template.setValueSerializer(serializer);    // value 序列化
        template.setHashKeySerializer(serializer);  // hash key 序列化
        template.setHashValueSerializer(serializer);// hash value 序列化

        template.afterPropertiesSet();
        return template;
    }
}